<template>
  <!-- #ifdef APP-NVUE -->
  <text :style="styleObj" class="uni-icons" @click="_onClick">{{
    unicode
  }}</text>
  <!-- #endif -->
  <!-- #ifndef APP-NVUE -->
  <text
    :style="styleObj"
    class="uni-icons"
    :class="['uniui-' + type, customPrefix, customPrefix ? type : '']"
    @click="_onClick"
  >
    <slot></slot>
  </text>
  <!-- #endif -->
</template>

<script>
  import { fontData } from "./uniicons_file_vue.js";

  const getVal = (val) => {
    const reg = /^[0-9]*$/g;
    return typeof val === "number" || reg.test(val) ? val + "px" : val;
  };

  // #ifdef APP-NVUE
  var domModule = weex.requireModule("dom");
  import iconUrl from "./uniicons.ttf";
  domModule.addRule("fontFace", {
    fontFamily: "uniicons",
    src: "url('" + iconUrl + "')",
  });
  // #endif

  /**
   * Icons 图标
   * @description 用于展示 icons 图标
   * @tutorial https://ext.dcloud.net.cn/plugin?id=28
   * @property {Number} size 图标大小
   * @property {String} type 图标图案，参考示例
   * @property {String} color 图标颜色
   * @property {String} customPrefix 自定义图标
   * @event {Function} click 点击 Icon 触发事件
   */
  export default {
    name: "UniIcons",
    emits: ["click"],
    props: {
      type: {
        type: String,
        default: "",
      },
      color: {
        type: String,
        default: "#333333",
      },
      size: {
        type: [Number, String],
        default: 16,
      },
      customPrefix: {
        type: String,
        default: "",
      },
      fontFamily: {
        type: String,
        default: "",
      },
    },
    data() {
      return {
        icons: fontData,
      };
    },
    computed: {
      unicode() {
        let code = this.icons.find((v) => v.font_class === this.type);
        if (code) {
          return code.unicode;
        }
        return "";
      },
      iconSize() {
        return getVal(this.size);
      },
      styleObj() {
        if (this.fontFamily !== "") {
          return `color: ${this.color}; font-size: ${this.iconSize}; font-family: ${this.fontFamily};`;
        }
        return `color: ${this.color}; font-size: ${this.iconSize};`;
      },
    },
    methods: {
      _onClick() {
        this.$emit("click");
      },
    },
  };
</script>

<style lang="scss">
  /* #ifndef APP-NVUE */
  @import "./uniicons.css";

  @font-face {
    font-family: uniicons;
    src: url("./uniicons.ttf");
  }

  /* #endif */
  .uni-icons {
    font-family: uniicons;
    text-decoration: none;
    text-align: center;
  }
</style>
